JIT(Just-In-Time) ์ปดํ์ผ์ ๊ฐ๋ , ์ฅ์ , ๊ณผ์ ๋ฐ ํ๋ ์ํํธ์จ์ด ์ฑ๋ฅ์์์ ์ญํ ์ ํ์ํฉ๋๋ค. JIT ์ปดํ์ผ๋ฌ๊ฐ ๋ค์ํ ์ํคํ ์ฒ์์ ์ฝ๋๋ฅผ ๋์ ์ผ๋ก ์ต์ ํํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด์ธ์.
JIT(Just-In-Time) ์ปดํ์ผ: ๋์ ์ต์ ํ ์ฌ์ธต ๋ถ์
๋์์์ด ๋ฐ์ ํ๋ ์ํํธ์จ์ด ๊ฐ๋ฐ ์ธ๊ณ์์ ์ฑ๋ฅ์ ์ฌ์ ํ ์ค์ํ ์์์ ๋๋ค. JIT(Just-In-Time) ์ปดํ์ผ์ ์ธํฐํ๋ฆฌํฐ ์ธ์ด์ ์ ์ฐ์ฑ๊ณผ ์ปดํ์ผ ์ธ์ด์ ์๋ ์ฌ์ด์ ๊ฒฉ์ฐจ๋ฅผ ํด์ํ๋ ํต์ฌ ๊ธฐ์ ๋ก ๋ถ์ํ์ต๋๋ค. ์ด ์ข ํฉ ๊ฐ์ด๋์์๋ JIT ์ปดํ์ผ์ ๋ณต์ก์ฑ, ์ฅ์ , ๊ณผ์ ๋ฐ ํ๋ ์ํํธ์จ์ด ์์คํ ์์์ ์ค์ํ ์ญํ ์ ๋ํด ์์ธํ ์ดํด๋ด ๋๋ค.
JIT(Just-In-Time) ์ปดํ์ผ์ด๋ ๋ฌด์์ธ๊ฐ?
๋์ ๋ฒ์ญ์ด๋ผ๊ณ ๋ ์๋ ค์ง JIT ์ปดํ์ผ์ ์ฝ๋๊ฐ ์คํ ์ (AOT - Ahead-of-Time ์ปดํ์ผ)์ด ์๋ ๋ฐํ์ ์ค์ ์ปดํ์ผ๋๋ ๊ธฐ์ ์ ๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ์ธํฐํ๋ฆฌํฐ์ ์ ํต์ ์ธ ์ปดํ์ผ๋ฌ์ ์ฅ์ ์ ๊ฒฐํฉํ๋ ๊ฒ์ ๋ชฉํ๋ก ํฉ๋๋ค. ์ธํฐํ๋ฆฌํฐ ์ธ์ด๋ ํ๋ซํผ ๋ ๋ฆฝ์ฑ๊ณผ ๋น ๋ฅธ ๊ฐ๋ฐ ์ฃผ๊ธฐ๋ฅผ ์ ๊ณตํ์ง๋ง ์ข ์ข ์คํ ์๋๊ฐ ๋๋ฆฌ๋ค๋ ๋จ์ ์ด ์์ต๋๋ค. ์ปดํ์ผ ์ธ์ด๋ ์ฐ์ํ ์ฑ๋ฅ์ ์ ๊ณตํ์ง๋ง ์ผ๋ฐ์ ์ผ๋ก ๋ ๋ณต์กํ ๋น๋ ํ๋ก์ธ์ค๊ฐ ํ์ํ๊ณ ์ด์์ฑ์ด ๋ฎ์ต๋๋ค.
JIT ์ปดํ์ผ๋ฌ๋ ๋ฐํ์ ํ๊ฒฝ(์: Java ๊ฐ์ ๋จธ์ - JVM, .NET ๊ณต์ฉ ์ธ์ด ๋ฐํ์ - CLR) ๋ด์์ ์๋ํ๋ฉฐ ๋ฐ์ดํธ์ฝ๋ ๋๋ ์ค๊ฐ ํํ(IR)์ ๋ค์ดํฐ๋ธ ๊ธฐ๊ณ ์ฝ๋๋ก ๋์ ์ผ๋ก ๋ณํํฉ๋๋ค. ์ปดํ์ผ ํ๋ก์ธ์ค๋ ๋ฐํ์ ๋์์ ๊ธฐ๋ฐ์ผ๋ก ํธ๋ฆฌ๊ฑฐ๋๋ฉฐ, ์ฑ๋ฅ ํฅ์์ ๊ทน๋ํํ๊ธฐ ์ํด ์์ฃผ ์คํ๋๋ ์ฝ๋ ์ธ๊ทธ๋จผํธ("ํซ์คํ"์ด๋ผ๊ณ ํจ)์ ์ค์ ์ ๋ก๋๋ค.
JIT ์ปดํ์ผ ํ๋ก์ธ์ค: ๋จ๊ณ๋ณ ๊ฐ์
The JIT compilation process typically involves the following stages:- ์ฝ๋ ๋ก๋ฉ ๋ฐ ํ์ฑ: ๋ฐํ์ ํ๊ฒฝ์ ํ๋ก๊ทธ๋จ์ ๋ฐ์ดํธ์ฝ๋ ๋๋ IR์ ๋ก๋ํ๊ณ ํ์ฑํ์ฌ ํ๋ก๊ทธ๋จ์ ๊ตฌ์กฐ์ ์๋ฏธ๋ฅผ ์ดํดํฉ๋๋ค.
- ํ๋กํ์ผ๋ง ๋ฐ ํซ์คํ ๊ฐ์ง: JIT ์ปดํ์ผ๋ฌ๋ ์ฝ๋ ์คํ์ ๋ชจ๋ํฐ๋งํ๊ณ ๋ฃจํ, ํจ์ ๋๋ ๋ฉ์๋์ ๊ฐ์ด ์์ฃผ ์คํ๋๋ ์ฝ๋ ์น์ ์ ์๋ณํฉ๋๋ค. ์ด ํ๋กํ์ผ๋ง์ ์ปดํ์ผ๋ฌ๊ฐ ๊ฐ์ฅ ์ฑ๋ฅ์ ์ค์ํ ์์ญ์ ์ต์ ํ ๋ ธ๋ ฅ์ ์ง์คํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
- ์ปดํ์ผ: ํซ์คํ์ด ์๋ณ๋๋ฉด JIT ์ปดํ์ผ๋ฌ๋ ํด๋น ๋ฐ์ดํธ์ฝ๋ ๋๋ IR์ ๊ธฐ๋ณธ ํ๋์จ์ด ์ํคํ ์ฒ์ ํนํ๋ ๋ค์ดํฐ๋ธ ๊ธฐ๊ณ ์ฝ๋๋ก ๋ณํํฉ๋๋ค. ์ด ๋ณํ ๊ณผ์ ์๋ ์์ฑ๋ ์ฝ๋์ ํจ์จ์ฑ์ ํฅ์์ํค๊ธฐ ์ํ ๋ค์ํ ์ต์ ํ ๊ธฐ์ ์ด ํฌํจ๋ ์ ์์ต๋๋ค.
- ์ฝ๋ ์บ์ฑ: ์ปดํ์ผ๋ ๋ค์ดํฐ๋ธ ์ฝ๋๋ ์ฝ๋ ์บ์์ ์ ์ฅ๋ฉ๋๋ค. ์ดํ ๋์ผํ ์ฝ๋ ์ธ๊ทธ๋จผํธ๋ฅผ ์คํํ ๋ ์บ์๋ ๋ค์ดํฐ๋ธ ์ฝ๋๋ฅผ ์ง์ ํ์ฉํ์ฌ ๋ฐ๋ณต์ ์ธ ์ปดํ์ผ์ ํผํ ์ ์์ต๋๋ค.
- ์ญ์ต์ ํ(Deoptimization): ๊ฒฝ์ฐ์ ๋ฐ๋ผ JIT ์ปดํ์ผ๋ฌ๋ ์ด์ ์ ์ปดํ์ผ๋ ์ฝ๋๋ฅผ ์ญ์ต์ ํํด์ผ ํ ์ ์์ต๋๋ค. ์ด๋ ์ปดํ์ผ ์ค์ ๋ง๋ค์ด์ง ๊ฐ์ (์: ๋ฐ์ดํฐ ์ ํ ๋๋ ๋ถ๊ธฐ ์์ธก ํ๋ฅ )์ด ๋ฐํ์์ ์ ํจํ์ง ์์ ๊ฒ์ผ๋ก ํ๋ช ๋ ๋ ๋ฐ์ํ ์ ์์ต๋๋ค. ์ญ์ต์ ํ๋ ์๋ณธ ๋ฐ์ดํธ์ฝ๋๋ IR๋ก ๋๋์๊ฐ ๋ ์ ํํ ์ ๋ณด๋ก ๋ค์ ์ปดํ์ผํ๋ ๊ณผ์ ์ ํฌํจํฉ๋๋ค.
JIT ์ปดํ์ผ์ ์ฅ์
JIT ์ปดํ์ผ์ ๊ธฐ์กด์ ์ธํฐํ๋ฆฌํฐ ๋ฐฉ์ ๋ฐ AOT ์ปดํ์ผ์ ๋นํด ๋ช ๊ฐ์ง ์ค์ํ ์ด์ ์ ์ ๊ณตํฉ๋๋ค.
- ์ฑ๋ฅ ํฅ์: ๋ฐํ์์ ์ฝ๋๋ฅผ ๋์ ์ผ๋ก ์ปดํ์ผํจ์ผ๋ก์จ JIT ์ปดํ์ผ๋ฌ๋ ์ธํฐํ๋ฆฌํฐ์ ๋นํด ํ๋ก๊ทธ๋จ์ ์คํ ์๋๋ฅผ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ต๋๋ค. ์ด๋ ๋ค์ดํฐ๋ธ ๊ธฐ๊ณ ์ฝ๋๊ฐ ํด์๋ ๋ฐ์ดํธ์ฝ๋๋ณด๋ค ํจ์ฌ ๋น ๋ฅด๊ฒ ์คํ๋๊ธฐ ๋๋ฌธ์ ๋๋ค.
- ํ๋ซํผ ๋ ๋ฆฝ์ฑ: JIT ์ปดํ์ผ์ ์ฌ์ฉํ๋ฉด ํ๋ซํผ ๋ ๋ฆฝ์ ์ธ ์ธ์ด(์: Java, C#)๋ก ํ๋ก๊ทธ๋จ์ ์์ฑํ ๋ค์ ๋ฐํ์์ ๋์ ํ๋ซํผ์ ๋ง๋ ๋ค์ดํฐ๋ธ ์ฝ๋๋ก ์ปดํ์ผํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด "ํ ๋ฒ ์์ฑํ๋ฉด ์ด๋์๋ ์คํ๋๋(write once, run anywhere)" ๊ธฐ๋ฅ์ด ๊ฐ๋ฅํด์ง๋๋ค.
- ๋์ ์ต์ ํ: JIT ์ปดํ์ผ๋ฌ๋ ๋ฐํ์ ์ ๋ณด๋ฅผ ํ์ฉํ์ฌ ์ปดํ์ผ ์์ ์๋ ๋ถ๊ฐ๋ฅํ ์ต์ ํ๋ฅผ ์ํํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ปดํ์ผ๋ฌ๋ ์ค์ ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ ์ ํ์ด๋ ๊ฐ๊ธฐ ๋ค๋ฅธ ๋ถ๊ธฐ๊ฐ ์ ํ๋ ํ๋ฅ ์ ๊ธฐ๋ฐํ์ฌ ์ฝ๋๋ฅผ ํนํํ ์ ์์ต๋๋ค.
- ์์ ์๊ฐ ๋จ์ถ (AOT ๋๋น): AOT ์ปดํ์ผ์ ๊ณ ๋๋ก ์ต์ ํ๋ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ง๋ง, ์์ ์๊ฐ์ด ๊ธธ์ด์ง ์ ์์ต๋๋ค. JIT ์ปดํ์ผ์ ํ์ํ ๋๋ง ์ฝ๋๋ฅผ ์ปดํ์ผํ๋ฏ๋ก ์ด๊ธฐ ์์ ๊ฒฝํ์ด ๋ ๋น ๋ฅผ ์ ์์ต๋๋ค. ๋ง์ ํ๋ ์์คํ ์ ์์ ์๊ฐ๊ณผ ์ต๊ณ ์ฑ๋ฅ์ ๊ท ํ์ ๋ง์ถ๊ธฐ ์ํด JIT์ AOT ์ปดํ์ผ์ ํผํฉํ ํ์ด๋ธ๋ฆฌ๋ ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํฉ๋๋ค.
JIT ์ปดํ์ผ์ ๊ณผ์
์ฅ์ ์๋ ๋ถ๊ตฌํ๊ณ JIT ์ปดํ์ผ์ ๋ช ๊ฐ์ง ๊ณผ์ ๋ ์๊ณ ์์ต๋๋ค.
- ์ปดํ์ผ ์ค๋ฒํค๋: ๋ฐํ์์ ์ฝ๋๋ฅผ ์ปดํ์ผํ๋ ๊ณผ์ ์ ์ค๋ฒํค๋๋ฅผ ๋ฐ์์ํต๋๋ค. JIT ์ปดํ์ผ๋ฌ๋ ๋ค์ดํฐ๋ธ ์ฝ๋๋ฅผ ๋ถ์, ์ต์ ํ ๋ฐ ์์ฑํ๋ ๋ฐ ์๊ฐ์ ์๋นํด์ผ ํฉ๋๋ค. ์ด ์ค๋ฒํค๋๋ ํนํ ๋๋ฌผ๊ฒ ์คํ๋๋ ์ฝ๋์ ์ฑ๋ฅ์ ๋ถ์ ์ ์ธ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค.
- ๋ฉ๋ชจ๋ฆฌ ์๋น: JIT ์ปดํ์ผ๋ฌ๋ ์ปดํ์ผ๋ ๋ค์ดํฐ๋ธ ์ฝ๋๋ฅผ ์ฝ๋ ์บ์์ ์ ์ฅํ๊ธฐ ์ํด ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ์ํฉ๋๋ค. ์ด๋ก ์ธํด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์ฒด ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ์ฆ๊ฐํ ์ ์์ต๋๋ค.
- ๋ณต์ก์ฑ: JIT ์ปดํ์ผ๋ฌ๋ฅผ ๊ตฌํํ๋ ๊ฒ์ ์ปดํ์ผ๋ฌ ์ค๊ณ, ๋ฐํ์ ์์คํ ๋ฐ ํ๋์จ์ด ์ํคํ ์ฒ์ ๋ํ ์ ๋ฌธ ์ง์์ด ํ์ํ ๋ณต์กํ ์์ ์ ๋๋ค.
- ๋ณด์ ๋ฌธ์ : ๋์ ์ผ๋ก ์์ฑ๋ ์ฝ๋๋ ์ ์ฌ์ ์ผ๋ก ๋ณด์ ์ทจ์ฝ์ ์ ์ ๋ฐํ ์ ์์ต๋๋ค. JIT ์ปดํ์ผ๋ฌ๋ ์ ์ฑ ์ฝ๋๊ฐ ์ฃผ์ ๋๊ฑฐ๋ ์คํ๋๋ ๊ฒ์ ๋ฐฉ์งํ๊ธฐ ์ํด ์ ์คํ๊ฒ ์ค๊ณ๋์ด์ผ ํฉ๋๋ค.
- ์ญ์ต์ ํ ๋น์ฉ: ์ญ์ต์ ํ๊ฐ ๋ฐ์ํ๋ฉด ์์คํ ์ ์ปดํ์ผ๋ ์ฝ๋๋ฅผ ๋ฒ๋ฆฌ๊ณ ์ธํฐํ๋ฆฌํฐ ๋ชจ๋๋ก ๋๋์๊ฐ์ผ ํ๋ฏ๋ก ์๋นํ ์ฑ๋ฅ ์ ํ๋ฅผ ์ ๋ฐํ ์ ์์ต๋๋ค. ์ญ์ต์ ํ๋ฅผ ์ต์ํํ๋ ๊ฒ์ JIT ์ปดํ์ผ๋ฌ ์ค๊ณ์ ์ค์ํ ์ธก๋ฉด์ ๋๋ค.
์ค์ JIT ์ปดํ์ผ ์ ์ฉ ์ฌ๋ก
JIT ์ปดํ์ผ์ ๋ค์ํ ์ํํธ์จ์ด ์์คํ ๋ฐ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ๋๋ฆฌ ์ฌ์ฉ๋ฉ๋๋ค.
- Java ๊ฐ์ ๋จธ์ (JVM): JVM์ JIT ์ปดํ์ผ๋ฌ๋ฅผ ์ฌ์ฉํ์ฌ Java ๋ฐ์ดํธ์ฝ๋๋ฅผ ๋ค์ดํฐ๋ธ ๊ธฐ๊ณ ์ฝ๋๋ก ๋ณํํฉ๋๋ค. ๊ฐ์ฅ ๋๋ฆฌ ์ฌ์ฉ๋๋ JVM ๊ตฌํ์ฒด์ธ HotSpot VM์๋ ๊ด๋ฒ์ํ ์ต์ ํ๋ฅผ ์ํํ๋ ์ ๊ตํ JIT ์ปดํ์ผ๋ฌ๊ฐ ํฌํจ๋์ด ์์ต๋๋ค.
- .NET ๊ณต์ฉ ์ธ์ด ๋ฐํ์(CLR): CLR์ JIT ์ปดํ์ผ๋ฌ๋ฅผ ์ฌ์ฉํ์ฌ ๊ณตํต ์ค๊ฐ ์ธ์ด(CIL) ์ฝ๋๋ฅผ ๋ค์ดํฐ๋ธ ์ฝ๋๋ก ๋ณํํฉ๋๋ค. .NET Framework์ .NET Core๋ ๊ด๋ฆฌ ์ฝ๋๋ฅผ ์คํํ๊ธฐ ์ํด CLR์ ์์กดํฉ๋๋ค.
- JavaScript ์์ง: V8(Chrome ๋ฐ Node.js์์ ์ฌ์ฉ) ๋ฐ SpiderMonkey(Firefox์์ ์ฌ์ฉ)์ ๊ฐ์ ์ต์ JavaScript ์์ง์ ๊ณ ์ฑ๋ฅ์ ๋ฌ์ฑํ๊ธฐ ์ํด JIT ์ปดํ์ผ์ ํ์ฉํฉ๋๋ค. ์ด ์์ง๋ค์ JavaScript ์ฝ๋๋ฅผ ๋์ ์ผ๋ก ๋ค์ดํฐ๋ธ ๊ธฐ๊ณ ์ฝ๋๋ก ์ปดํ์ผํฉ๋๋ค.
- Python: Python์ ์ ํต์ ์ผ๋ก ์ธํฐํ๋ฆฌํฐ ์ธ์ด์ด์ง๋ง, PyPy๋ Numba์ ๊ฐ์ ์ฌ๋ฌ JIT ์ปดํ์ผ๋ฌ๊ฐ Python์ ์ํด ๊ฐ๋ฐ๋์์ต๋๋ค. ์ด๋ฌํ ์ปดํ์ผ๋ฌ๋ ํนํ ์์น ๊ณ์ฐ์์ Python ์ฝ๋์ ์ฑ๋ฅ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ต๋๋ค.
- LuaJIT: LuaJIT๋ Lua ์คํฌ๋ฆฝํ ์ธ์ด๋ฅผ ์ํ ๊ณ ์ฑ๋ฅ JIT ์ปดํ์ผ๋ฌ์ ๋๋ค. ๊ฒ์ ๊ฐ๋ฐ ๋ฐ ์๋ฒ ๋๋ ์์คํ ์์ ๋๋ฆฌ ์ฌ์ฉ๋ฉ๋๋ค.
- GraalVM: GraalVM์ ๊ด๋ฒ์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ์ง์ํ๊ณ ๊ณ ๊ธ JIT ์ปดํ์ผ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ๋ฒ์ฉ ๊ฐ์ ๋จธ์ ์ ๋๋ค. Java, JavaScript, Python, Ruby, R๊ณผ ๊ฐ์ ์ธ์ด๋ฅผ ์คํํ๋ ๋ฐ ์ฌ์ฉ๋ ์ ์์ต๋๋ค.
JIT ๋ AOT: ๋น๊ต ๋ถ์
JIT(Just-In-Time)๊ณผ AOT(Ahead-of-Time) ์ปดํ์ผ์ ์ฝ๋ ์ปดํ์ผ์ ๋ํ ๋ ๊ฐ์ง ๋ค๋ฅธ ์ ๊ทผ ๋ฐฉ์์ ๋๋ค. ์ฃผ์ ํน์ง์ ๋น๊ตํ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
| ํน์ง | JIT(Just-In-Time) | AOT(Ahead-of-Time) |
|---|---|---|
| ์ปดํ์ผ ์์ | ๋ฐํ์ | ๋น๋ ํ์ |
| ํ๋ซํผ ๋ ๋ฆฝ์ฑ | ๋์ | ๋ฎ์ (๊ฐ ํ๋ซํผ๋ณ ์ปดํ์ผ ํ์) |
| ์์ ์๊ฐ | ๋ ๋น ๋ฆ (์ด๊ธฐ) | ๋ ๋๋ฆผ (์ฌ์ ์ ์ฒด ์ปดํ์ผ๋ก ์ธํด) |
| ์ฑ๋ฅ | ์ ์ฌ์ ์ผ๋ก ๋ ๋์ (๋์ ์ต์ ํ) | ์ผ๋ฐ์ ์ผ๋ก ์ข์ (์ ์ ์ต์ ํ) |
| ๋ฉ๋ชจ๋ฆฌ ์๋น | ๋ ๋์ (์ฝ๋ ์บ์) | ๋ ๋ฎ์ |
| ์ต์ ํ ๋ฒ์ | ๋์ (๋ฐํ์ ์ ๋ณด ํ์ฉ ๊ฐ๋ฅ) | ์ ์ (์ปดํ์ผ ํ์ ์ ๋ณด๋ก ์ ํ) |
| ์ฌ์ฉ ์ฌ๋ก | ์น ๋ธ๋ผ์ฐ์ , ๊ฐ์ ๋จธ์ , ๋์ ์ธ์ด | ์๋ฒ ๋๋ ์์คํ , ๋ชจ๋ฐ์ผ ์ ํ๋ฆฌ์ผ์ด์ , ๊ฒ์ ๊ฐ๋ฐ |
์์: ํฌ๋ก์คํ๋ซํผ ๋ชจ๋ฐ์ผ ์ ํ๋ฆฌ์ผ์ด์ ์ ์๊ฐํด ๋ด ์๋ค. JavaScript์ JIT ์ปดํ์ผ๋ฌ๋ฅผ ํ์ฉํ๋ React Native์ ๊ฐ์ ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ๋ฐ์๋ ์ฝ๋๋ฅผ ํ ๋ฒ ์์ฑํ์ฌ iOS์ Android ๋ชจ๋์ ๋ฐฐํฌํ ์ ์์ต๋๋ค. ๋ฐ๋ฉด, ๋ค์ดํฐ๋ธ ๋ชจ๋ฐ์ผ ๊ฐ๋ฐ(์: iOS์ฉ Swift, Android์ฉ Kotlin)์ ์ผ๋ฐ์ ์ผ๋ก AOT ์ปดํ์ผ์ ์ฌ์ฉํ์ฌ ๊ฐ ํ๋ซํผ์ ๊ณ ๋๋ก ์ต์ ํ๋ ์ฝ๋๋ฅผ ์์ฑํฉ๋๋ค.
JIT ์ปดํ์ผ๋ฌ์์ ์ฌ์ฉ๋๋ ์ต์ ํ ๊ธฐ๋ฒ
JIT ์ปดํ์ผ๋ฌ๋ ์์ฑ๋ ์ฝ๋์ ์ฑ๋ฅ์ ํฅ์์ํค๊ธฐ ์ํด ๊ด๋ฒ์ํ ์ต์ ํ ๊ธฐ๋ฒ์ ์ฌ์ฉํฉ๋๋ค. ์ผ๋ฐ์ ์ธ ๊ธฐ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์ธ๋ผ์ด๋(Inlining): ํจ์ ํธ์ถ์ ์ค์ ํจ์ ์ฝ๋๋ก ๋์ฒดํ์ฌ ํจ์ ํธ์ถ๊ณผ ๊ด๋ จ๋ ์ค๋ฒํค๋๋ฅผ ์ค์ ๋๋ค.
- ๋ฃจํ ์ธ๋กค๋ง(Loop Unrolling): ๋ฃจํ ๋ณธ๋ฌธ์ ์ฌ๋ฌ ๋ฒ ๋ณต์ ํ์ฌ ๋ฃจํ๋ฅผ ํ์ฅํ๊ณ ๋ฃจํ ์ค๋ฒํค๋๋ฅผ ์ค์ ๋๋ค.
- ์์ ์ ํ(Constant Propagation): ๋ณ์๋ฅผ ์์ ๊ฐ์ผ๋ก ๋์ฒดํ์ฌ ์ถ๊ฐ์ ์ธ ์ต์ ํ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
- ์ฃฝ์ ์ฝ๋ ์ ๊ฑฐ(Dead Code Elimination): ์ ํ ์คํ๋์ง ์๋ ์ฝ๋๋ฅผ ์ ๊ฑฐํ์ฌ ์ฝ๋ ํฌ๊ธฐ๋ฅผ ์ค์ด๊ณ ์ฑ๋ฅ์ ํฅ์์ํต๋๋ค.
- ๊ณตํต ๋ถ๋ถ ํํ์ ์ ๊ฑฐ(Common Subexpression Elimination): ์ค๋ณต๋๋ ๊ณ์ฐ์ ์๋ณํ๊ณ ์ ๊ฑฐํ์ฌ ์คํ๋๋ ๋ช ๋ น์ด ์๋ฅผ ์ค์ ๋๋ค.
- ํ์ ํนํ(Type Specialization): ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ์ ํ์ ์ ๊ธฐ๋ฐํ์ฌ ํนํ๋ ์ฝ๋๋ฅผ ์์ฑํ์ฌ ๋ ํจ์จ์ ์ธ ์ฐ์ฐ์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, JIT ์ปดํ์ผ๋ฌ๊ฐ ๋ณ์๊ฐ ํญ์ ์ ์์์ ๊ฐ์งํ๋ฉด ์ผ๋ฐ์ ์ธ ๋ช ๋ น์ด ๋์ ์ ์ ์ ์ฉ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ๋ถ๊ธฐ ์์ธก(Branch Prediction): ์กฐ๊ฑด๋ถ ๋ถ๊ธฐ์ ๊ฒฐ๊ณผ๋ฅผ ์์ธกํ๊ณ ์์ธก๋ ๊ฒฐ๊ณผ์ ๋ฐ๋ผ ์ฝ๋๋ฅผ ์ต์ ํํฉ๋๋ค.
- ๊ฐ๋น์ง ์ปฌ๋ ์ ์ต์ ํ: ๊ฐ๋น์ง ์ปฌ๋ ์ ์๊ณ ๋ฆฌ์ฆ์ ์ต์ ํํ์ฌ ์ค๋จ ์๊ฐ(pause)์ ์ต์ํํ๊ณ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ํจ์จ์ฑ์ ํฅ์์ํต๋๋ค.
- ๋ฒกํฐํ(Vectorization, SIMD): ๋จ์ผ ๋ช ๋ น์ด, ๋ค์ค ๋ฐ์ดํฐ(SIMD) ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ๋ฌ ๋ฐ์ดํฐ ์์์ ๋ํ ์ฐ์ฐ์ ๋์์ ์ํํจ์ผ๋ก์จ ๋ฐ์ดํฐ ๋ณ๋ ฌ ๊ณ์ฐ์ ์ฑ๋ฅ์ ํฅ์์ํต๋๋ค.
- ์ถ์ธก์ฑ ์ต์ ํ(Speculative Optimization): ๋ฐํ์ ๋์์ ๋ํ ๊ฐ์ ์ ๊ธฐ๋ฐ์ผ๋ก ์ฝ๋๋ฅผ ์ต์ ํํฉ๋๋ค. ๋ง์ฝ ๊ฐ์ ์ด ์ ํจํ์ง ์์ ๊ฒ์ผ๋ก ํ๋ช ๋๋ฉด ์ฝ๋๋ ์ญ์ต์ ํ๋ ์ ์์ต๋๋ค.
JIT ์ปดํ์ผ์ ๋ฏธ๋
JIT ์ปดํ์ผ์ ๊ณ์ํด์ ๋ฐ์ ํ๋ฉฐ ํ๋ ์ํํธ์จ์ด ์์คํ ์์ ์ค์ํ ์ญํ ์ ํ๊ณ ์์ต๋๋ค. ๋ช ๊ฐ์ง ํธ๋ ๋๊ฐ JIT ๊ธฐ์ ์ ๋ฏธ๋๋ฅผ ํ์ฑํ๊ณ ์์ต๋๋ค.
- ํ๋์จ์ด ๊ฐ์ ์ฌ์ฉ ์ฆ๊ฐ: JIT ์ปดํ์ผ๋ฌ๋ ์ฑ๋ฅ์ ๋์ฑ ํฅ์์ํค๊ธฐ ์ํด SIMD ๋ช ๋ น์ด ๋ฐ ํน์ ์ฒ๋ฆฌ ์ฅ์น(์: GPU, TPU)์ ๊ฐ์ ํ๋์จ์ด ๊ฐ์ ๊ธฐ๋ฅ์ ์ ์ ๋ ๋ง์ด ํ์ฉํ๊ณ ์์ต๋๋ค.
- ๋จธ์ ๋ฌ๋๊ณผ์ ํตํฉ: JIT ์ปดํ์ผ๋ฌ์ ํจ์จ์ฑ์ ๊ฐ์ ํ๊ธฐ ์ํด ๋จธ์ ๋ฌ๋ ๊ธฐ์ ์ด ์ฌ์ฉ๋๊ณ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ด๋ค ์ฝ๋ ์น์ ์ด ์ต์ ํ์ ์ด์ ์ ๊ฐ์ฅ ๋ง์ด ๋ฐ์์ง ์์ธกํ๊ฑฐ๋ JIT ์ปดํ์ผ๋ฌ ์์ฒด์ ๋งค๊ฐ๋ณ์๋ฅผ ์ต์ ํํ๋๋ก ๋จธ์ ๋ฌ๋ ๋ชจ๋ธ์ ํ๋ จ์ํฌ ์ ์์ต๋๋ค.
- ์๋ก์ด ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ๋ฐ ํ๋ซํผ ์ง์: JIT ์ปดํ์ผ์ ์๋ก์ด ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ํ๋ซํผ์ ์ง์ํ๋๋ก ํ์ฅ๋์ด ๊ฐ๋ฐ์๊ฐ ๋ ๋์ ๋ฒ์์ ํ๊ฒฝ์์ ๊ณ ์ฑ๋ฅ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ฑํ ์ ์๋๋ก ํฉ๋๋ค.
- JIT ์ค๋ฒํค๋ ๊ฐ์: JIT ์ปดํ์ผ๊ณผ ๊ด๋ จ๋ ์ค๋ฒํค๋๋ฅผ ์ค์ฌ ๋ ๋์ ๋ฒ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ ํจ์จ์ ์ผ๋ก ๋ง๋๋ ์ฐ๊ตฌ๊ฐ ์งํ ์ค์ ๋๋ค. ์ฌ๊ธฐ์๋ ๋ ๋น ๋ฅธ ์ปดํ์ผ๊ณผ ๋ ํจ์จ์ ์ธ ์ฝ๋ ์บ์ฑ ๊ธฐ์ ์ด ํฌํจ๋ฉ๋๋ค.
- ๋ ์ ๊ตํ ํ๋กํ์ผ๋ง: ํซ์คํ์ ๋ ์ ์๋ณํ๊ณ ์ต์ ํ ๊ฒฐ์ ์ ์๋ดํ๊ธฐ ์ํด ๋ ์์ธํ๊ณ ์ ํํ ํ๋กํ์ผ๋ง ๊ธฐ์ ์ด ๊ฐ๋ฐ๋๊ณ ์์ต๋๋ค.
- ํ์ด๋ธ๋ฆฌ๋ JIT/AOT ์ ๊ทผ ๋ฐฉ์: JIT์ AOT ์ปดํ์ผ์ ์กฐํฉ์ด ๋์ฑ ๋ณดํธํ๋๋ฉด์ ๊ฐ๋ฐ์๋ ์์ ์๊ฐ๊ณผ ์ต๊ณ ์ฑ๋ฅ์ ๊ท ํ์ ๋ง์ถ ์ ์๊ฒ ๋์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ผ๋ถ ์์คํ ์์๋ ์์ฃผ ์ฌ์ฉ๋๋ ์ฝ๋์ AOT ์ปดํ์ผ์, ๋ ์ฌ์ฉ๋๋ ์ฝ๋์ JIT ์ปดํ์ผ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๊ฐ๋ฐ์๋ฅผ ์ํ ์คํ ๊ฐ๋ฅํ ํต์ฐฐ๋ ฅ
๊ฐ๋ฐ์๊ฐ JIT ์ปดํ์ผ์ ํจ๊ณผ์ ์ผ๋ก ํ์ฉํ๊ธฐ ์ํ ๋ช ๊ฐ์ง ์คํ ๊ฐ๋ฅํ ํต์ฐฐ๋ ฅ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์ฌ์ฉํ๋ ์ธ์ด์ ๋ฐํ์์ ์ฑ๋ฅ ํน์ฑ ์ดํด: ๊ฐ ์ธ์ด์ ๋ฐํ์ ์์คํ ์ ๊ณ ์ ํ ๊ฐ์ ๊ณผ ์ฝ์ ์ ๊ฐ์ง ์์ฒด JIT ์ปดํ์ผ๋ฌ ๊ตฌํ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์ด๋ฌํ ํน์ฑ์ ์ดํดํ๋ฉด ๋ ์ฝ๊ฒ ์ต์ ํ๋ ์ ์๋ ์ฝ๋๋ฅผ ์์ฑํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
- ์ฝ๋ ํ๋กํ์ผ๋ง: ํ๋กํ์ผ๋ง ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ฝ๋์ ํซ์คํ์ ์๋ณํ๊ณ ํด๋น ์์ญ์ ์ต์ ํ ๋ ธ๋ ฅ์ ์ง์คํ์ธ์. ๋๋ถ๋ถ์ ์ต์ IDE ๋ฐ ๋ฐํ์ ํ๊ฒฝ์ ํ๋กํ์ผ๋ง ๋๊ตฌ๋ฅผ ์ ๊ณตํฉ๋๋ค.
- ํจ์จ์ ์ธ ์ฝ๋ ์์ฑ: ๋ถํ์ํ ๊ฐ์ฒด ์์ฑ์ ํผํ๊ณ , ์ ์ ํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๊ณ , ๋ฃจํ ์ค๋ฒํค๋๋ฅผ ์ต์ํํ๋ ๋ฑ ํจ์จ์ ์ธ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์ํ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฐ๋ฅด์ธ์. ์ ๊ตํ JIT ์ปดํ์ผ๋ฌ๊ฐ ์๋๋ผ๋ ์๋ชป ์์ฑ๋ ์ฝ๋๋ ์ฌ์ ํ ์ฑ๋ฅ์ด ์ ํ๋ฉ๋๋ค.
- ํนํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ ๊ณ ๋ ค: ์์น ๊ณ์ฐ์ด๋ ๋ฐ์ดํฐ ๋ถ์์ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ฐ์ ํนํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์๋ JIT ์ปดํ์ผ์ ํจ๊ณผ์ ์ผ๋ก ํ์ฉํ ์ ์๋ ๊ณ ๋๋ก ์ต์ ํ๋ ์ฝ๋๊ฐ ํฌํจ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ์๋ฅผ ๋ค์ด, Python์์ NumPy๋ฅผ ์ฌ์ฉํ๋ฉด ํ์ค Python ๋ฃจํ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๋ณด๋ค ์์น ๊ณ์ฐ ์ฑ๋ฅ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ต๋๋ค.
- ์ปดํ์ผ๋ฌ ํ๋๊ทธ ์คํ: ์ผ๋ถ JIT ์ปดํ์ผ๋ฌ๋ ์ต์ ํ ํ๋ก์ธ์ค๋ฅผ ์กฐ์ ํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ์ปดํ์ผ๋ฌ ํ๋๊ทธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด๋ฌํ ํ๋๊ทธ๋ฅผ ์คํํ์ฌ ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์๋์ง ํ์ธํ์ธ์.
- ์ญ์ต์ ํ ์ธ์ง: ๋น๋ฒํ ํ์ ๋ณ๊ฒฝ์ด๋ ์์ธก ๋ถ๊ฐ๋ฅํ ๋ถ๊ธฐ์ฒ๋ผ ์ญ์ต์ ํ๋ฅผ ์ ๋ฐํ ๊ฐ๋ฅ์ฑ์ด ์๋ ์ฝ๋ ํจํด์ ํผํ์ธ์.
- ์ฒ ์ ํ ํ ์คํธ: ์ต์ ํ๊ฐ ์ค์ ๋ก ์ฑ๋ฅ์ ํฅ์์ํค๊ณ ๋ฒ๊ทธ๋ฅผ ์ ๋ฐํ์ง ์๋์ง ํ์ธํ๊ธฐ ์ํด ํญ์ ์ฝ๋๋ฅผ ์ฒ ์ ํ ํ ์คํธํ์ธ์.
๊ฒฐ๋ก
JIT(Just-In-Time) ์ปดํ์ผ์ ์ํํธ์จ์ด ์์คํ ์ ์ฑ๋ฅ์ ํฅ์์ํค๋ ๊ฐ๋ ฅํ ๊ธฐ์ ์ ๋๋ค. ๋ฐํ์์ ์ฝ๋๋ฅผ ๋์ ์ผ๋ก ์ปดํ์ผํจ์ผ๋ก์จ JIT ์ปดํ์ผ๋ฌ๋ ์ธํฐํ๋ฆฌํฐ ์ธ์ด์ ์ ์ฐ์ฑ๊ณผ ์ปดํ์ผ ์ธ์ด์ ์๋๋ฅผ ๊ฒฐํฉํ ์ ์์ต๋๋ค. JIT ์ปดํ์ผ์๋ ๋ช ๊ฐ์ง ๊ณผ์ ๊ฐ ์์ง๋ง, ๊ทธ ์ฅ์ ์ผ๋ก ์ธํด ํ๋ ๊ฐ์ ๋จธ์ , ์น ๋ธ๋ผ์ฐ์ ๋ฐ ๊ธฐํ ์ํํธ์จ์ด ํ๊ฒฝ์์ ํต์ฌ ๊ธฐ์ ์ด ๋์์ต๋๋ค. ํ๋์จ์ด์ ์ํํธ์จ์ด๊ฐ ๊ณ์ ๋ฐ์ ํจ์ ๋ฐ๋ผ JIT ์ปดํ์ผ์ ์์ฌํ ์ฌ์ง์์ด ์ค์ํ ์ฐ๊ตฌ ๊ฐ๋ฐ ๋ถ์ผ๋ก ๋จ์ ๊ฒ์ด๋ฉฐ, ๊ฐ๋ฐ์๋ค์ด ์ ์ ๋ ํจ์จ์ ์ด๊ณ ์ฑ๋ฅ์ด ๋ฐ์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค ์ ์๋๋ก ํ ๊ฒ์ ๋๋ค.